package com.cbf4life.strategy;

/**
 * @author cbf4Life cbf4life@126.com I'm glad to share my knowledge with you all.
 */
public class ZhaoYun {

	/**
	 * 赵云出场了，他根据诸葛亮给他的交代，依次拆开妙计
	 */
	public static void main(String[] args) {
		Context context;

		// 刚刚到吴国的时候拆第一个
		System.out.println("-----------刚刚到吴国的时候拆第一个-------------");
		context = new Context(new BackDoor()); // 拿到妙计

		context.operate();

		// 拆开执行

		System.out.println("\n\n\n\n\n\n\n\n");

		// 刘备乐不思蜀了，拆第二个了
		System.out.println("-----------刘备乐不思蜀了，拆第二个了-------------");
		context = new Context(new GivenGreenLight());

		context.operate();

		// 执行了第二个锦囊了

		System.out.println("\n\n\n\n\n\n\n\n");

		// 孙权的小兵追了，咋办？拆第三个
		System.out.println("-----------孙权的小兵追了，咋办？拆第三个-------------");
		context = new Context(new BlockEnemy());

		context.operate();

		// 孙夫人退兵

		System.out.println("\n\n\n\n\n\n\n\n");

		/*问题来了：赵云实际不知道是那个策略呀，他只知道拆第一个锦囊，而不知道是BackDoor这个妙计，咋办？ 似乎这个策略模式已经把计谋名称写出来了
		 * 
		 * 错！BackDoor、GivenGreenLight、BlockEnemy只是一个代码，你写成first、second、 third，没人会说你错!
		 * 
		 * 策略模式的好处就是：体现了高内聚低耦合的特性呀，缺点嘛，这个那个，我回去再查查 */
	}
}
